package cliente.hospede;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JOptionPane;

import cliente.tipos.Hospede;

import mensagens.EnviaDados;
import mensagens.ManterHospede;
import mensagens.Mensagem;

import cpf.CPF;

@SuppressWarnings("serial")
public class ExecutaProcurarHospede extends AbstractAction{
	
	private ProcurarHospede ph;
	
	public ExecutaProcurarHospede(ProcurarHospede ph) {
		setPh(ph);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if("fechar".equals(e.getActionCommand())){
			getPh().getTfProcurarHospede().dispose();
		} else if("procurar".equals(e.getActionCommand())){
			// Lê o nome e o cpf
			String nomeR = getPh().gettNomeHospede().getText();
			String cpfR = getPh().gettCPF().getText();
			
			// DEBUG
			// System.out.println("Acabei de ler: "+nomeR+", "+cpfR);
			
			if(cpfR.length() != 0){
				if(!CPF.validaCPF(cpfR)){
					JOptionPane.showMessageDialog(getPh().getTfProcurarHospede(),"Informe um CPF válido!", "Erro!",JOptionPane.ERROR_MESSAGE);
					return;
				}
			}
			
			if(nomeR.length() == 0){
				JOptionPane.showMessageDialog(getPh().getTfProcurarHospede(),"O Nome não pode ser vazio!", "Erro!",JOptionPane.ERROR_MESSAGE);
				return;
			}
			// Cria uma mensagem do tipo ManterHospede, com subtipo 1
			ManterHospede mh = new ManterHospede(2);
			// Cria um novo hóspede para enviar
			Hospede h = new Hospede();
			// Ajusta o nome e cpf do hóspede
			h.setNome(nomeR);
			h.setCpf(cpfR);
			// Salva o hóspede como hóspede da mensagem a ser enviada
			mh.setHospede(h);
			
			// DEBUG
			// System.out.println("Na mensagem: "+mh.getHospede().getNome()+", "+mh.getHospede().getCpf());
			
			// Envia a mensagem e guarda a mensagem de resposta em mensagemRetornada
			Mensagem mensagemRetornada = EnviaDados.enviarMensagem(mh);
			ManterHospede msgResponse = null;
			// Verifica se a mensagem retornada é do tipo correto
			if(mensagemRetornada instanceof ManterHospede){
				msgResponse = (ManterHospede) mensagemRetornada;
			} else {
				System.out.println("Erro! Mensagem errada recebida!");
				return;
			}
			
			if(msgResponse.getTipoManterHospede() == 21){
				System.out.println("Mensagem recebida, Hospede econtrado!"+msgResponse.getHospede().getNome());
				getPh().gettNomeHospede().setText(msgResponse.getHospede().getNome());
				getPh().gettCPF().setText(msgResponse.getHospede().getCpf());
			} else {
				System.out.println("Mensagem recebida, Hospede NÃO econtrado!");
				JOptionPane.showMessageDialog(getPh().getTfProcurarHospede(),"Ocorreu um erro ao procurar o hóspede (está cadastrado?)!", "Erro!",JOptionPane.ERROR_MESSAGE);
			}
		}
		
	}

	public void setPh(ProcurarHospede ph) {
		this.ph = ph;
	}

	public ProcurarHospede getPh() {
		return ph;
	}

}
